﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Excel;
using System.Reflection;

namespace GH.Web
{

    //工会工作
    //1、工会工作-工会组织机构统计表
    //2、工会工作-工会建家统计表	
    //3、各类员工入会率统计						
    //4、聘用各类劳务人员入会率统计						
    //5、各级工会组织、专职工会干部、工会干部培训统计						
    //6、专职工会干部统计						
    //7、工会工作-基层工会年度法律援助工作统计	
    //8、工会工作-基层单位厂务公开民主管理工作统计表
    //9、工会工作-劳动模范及获乐山市以上先进集体统计表
    //职工福利
    //1、职工福利-互助员工统计表		
    //2、职工福利-疗（休）养计划表		
    //3、职工福利-疗养情况统计表



    /// <summary>
    /// 报表区分
    /// </summary>
    public enum enumExcelOptiion
    {
        工会组织机构统计表= 0,
        工会建家统计表= 1,	
        基层工会年度组织工作统计= 2,
        各类员工入会率统计= 3,						
        聘用各类劳务人员入会率统计= 4,						
        各级工会组织专职工会干部工会干部培训统计= 5,						
        专职工会干部统计= 6,	
        基层工会年度法律援助工作统计= 7,	
        基层单位厂务公开民主管理工作统计表= 8,
        劳动模范及获乐山市以上先进集体统计表= 9,
        互助员工统计表= 10,
        疗养计划表= 11,		
        疗养情况统计表= 12
    }

    public partial class ExcelTest : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            //Excel操作类
            ExcelOperate excelOperate = new ExcelOperate();
            
            string template_path = Server.MapPath("");//模板路径
            Excel.Application app = new Excel.Application();
            if (app == null)
            {
                return;
            }
            app.Visible = false;
            app.UserControl = true;
            Workbooks workbooks = app.Workbooks;
            _Workbook workbook = workbooks.Add(template_path + "\\工会组织机构统计表.xls");//这里的Add方法里的参数就是模板的路径      
            Sheets sheets = workbook.Worksheets;
            _Worksheet worksheet = (_Worksheet)sheets.get_Item(1); //这里表示模板只有一个sheet表
            if (worksheet == null)
            {
                return;
            }
            //单元格的赋值如下
            //worksheet.Cells[1,1] = "达赖集团";
            //复制
            //选择模板行
            //Range RangeFrom = worksheet.get_Range("B3", "I3");

            //拷贝到选择行
            //Range RangeTo = worksheet.get_Range("B4", "I4");
            //RangeFrom.Copy(RangeTo);

            // 在第row行插入一行(复制本行)

            ((Range)(worksheet.Rows[3, System.Type.Missing])).Copy(System.Type.Missing);
            for (int intIndex = 0; intIndex < 8; intIndex++)
            {
                ((Range)(worksheet.Cells[3, 1])).EntireRow.Insert(1, System.Type.Missing);
                //worksheet.Cells[3, 1] = intIndex.ToString();
            }
                        


            //DataTable dt=new dat
            System.Data.DataTable dtResult = new System.Data.DataTable();
            enumExcelOptiion enumExcelOptiion=new enumExcelOptiion();
            switch (enumExcelOptiion)
            {
                //1、工会工作-工会组织机构统计表
                case enumExcelOptiion.工会组织机构统计表:

                    break;
                //2、工会工作-工会建家统计表	
                case enumExcelOptiion.工会建家统计表:

                    break;
                //3、工会工作-基层工会年度组织工作统计
                case enumExcelOptiion.基层工会年度组织工作统计:

                    break;
                //4、工会工作-基层工会年度法律援助工作统计
                case enumExcelOptiion.基层工会年度法律援助工作统计:

                    break;
                //5、工会工作-基层单位厂务公开民主管理工作统计表
                case enumExcelOptiion.基层单位厂务公开民主管理工作统计表:

                    break;
                //6、工会工作-劳动模范及获乐山市以上先进集体统计表
                case enumExcelOptiion.劳动模范及获乐山市以上先进集体统计表:

                    break;
                //1、职工福利-互助员工统计表	
                case enumExcelOptiion.互助员工统计表:

                    break;
                //2、职工福利-疗（休）养计划表
                case enumExcelOptiion.疗养计划表:

                    break;
                //3、职工福利-疗养情况统计表
                case enumExcelOptiion.疗养情况统计表:

                    break;

            }
            string tick = DateTime.Now.Ticks.ToString();
            string strFileName = tick + ".xls";
            string strSavePath = template_path + "\\" + strFileName;
            
            workbook.SaveAs(strSavePath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
            
            excelOperate.Dispose(worksheet, workbook, app);//关闭Excel进程
            
            Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(strFileName));
            Response.ContentType = "application/ms-excel";// 指定返回的是一个不能被客户端读取的流，必须被下载
            Response.WriteFile(strFileName); // 把文件流发送到客户端
            Response.End();
        }


        public void ExcelReportExport(System.Data.DataTable dtSource ,enumExcelOptiion enumExcelOptiion)
        {
            //Excel操作类
            ExcelOperate excelOperate = new ExcelOperate();
            //报表模板名称
            string strTempateFileName = string.Empty;
            string template_path = Server.MapPath("");//模板路径
            Excel.Application app = new Excel.Application();
            if (app == null)
            {
                return;
            }
            app.Visible = false;
            app.UserControl = true;
            Workbooks workbooks = app.Workbooks;

            switch (enumExcelOptiion)
            {
                //1、工会工作-工会组织机构统计表
                case enumExcelOptiion.工会组织机构统计表:
                    strTempateFileName = "工会组织机构统计表.xls";
                    break;
                //2、工会工作-工会建家统计表	
                case enumExcelOptiion.工会建家统计表:
                    strTempateFileName = "工会建家统计表.xls";
                    break;

                //各类员工入会率统计
                case enumExcelOptiion.各类员工入会率统计:
                    strTempateFileName = "各类员工入会率统计.xls";
                    break;
                //聘用各类劳务人员入会率统计
                case enumExcelOptiion.聘用各类劳务人员入会率统计:
                    strTempateFileName = "聘用各类劳务人员入会率统计.xls";
                    break;
                //各级工会组织专职工会干部工会干部培训统计
                case enumExcelOptiion.各级工会组织专职工会干部工会干部培训统计:
                    strTempateFileName = "各级工会组织专职工会干部工会干部培训统计.xls";
                    break;
                //专职工会干部统计
                case enumExcelOptiion.专职工会干部统计:
                    strTempateFileName = "专职工会干部统计.xls";
                    break;


               //4、工会工作-基层工会年度法律援助工作统计
                case enumExcelOptiion.基层工会年度法律援助工作统计:
                    strTempateFileName = "基层工会年度法律援助工作统计.xls";
                    break;
                //5、工会工作-基层单位厂务公开民主管理工作统计表
                case enumExcelOptiion.基层单位厂务公开民主管理工作统计表:
                    strTempateFileName = "基层单位厂务公开民主管理工作统计表.xls";
                    break;
                //6、工会工作-劳动模范及获乐山市以上先进集体统计表
                case enumExcelOptiion.劳动模范及获乐山市以上先进集体统计表:
                    strTempateFileName = "劳动模范及获乐山市以上先进集体统计表.xls";
                    break;
                //1、职工福利-互助员工统计表	
                case enumExcelOptiion.互助员工统计表:
                    strTempateFileName = "互助员工统计表.xls";
                    break;
                //2、职工福利-疗（休）养计划表
                case enumExcelOptiion.疗养计划表:
                    strTempateFileName = "疗养计划表.xls";
                    break;
                //3、职工福利-疗养情况统计表
                case enumExcelOptiion.疗养情况统计表:
                    strTempateFileName = "疗养情况统计表.xls";
                    break;

            }
            _Workbook workbook = workbooks.Add(template_path + "\\" + strTempateFileName);//这里的Add方法里的参数就是模板的路径      
            Sheets sheets = workbook.Worksheets;
            _Worksheet worksheet = (_Worksheet)sheets.get_Item(1); //这里表示模板只有一个sheet表
            if (worksheet == null)
            {
                return;
            }
            
            switch (enumExcelOptiion)
            {
                //1、工会工作-工会组织机构统计表
                case enumExcelOptiion.工会组织机构统计表:
                    //插入格式   在第3行插入复制行
                    ((Range)(worksheet.Rows[3, System.Type.Missing])).Copy(System.Type.Missing);
                    for (int intIndex = 0; intIndex < dtSource.Rows.Count; intIndex++)
                    {
                        ((Range)(worksheet.Cells[3, 1])).EntireRow.Insert(1, System.Type.Missing);
                    }
                    //给报表赋值
                    for (int intIndex = 3; intIndex < dtSource.Rows.Count+3; intIndex++)
                    {
                        //行(B3到I3) 内容从第3行开始
                        //序号  B⇒2	
                        worksheet.Cells[intIndex, 2] = dtSource.Rows[intIndex - 3]["序号"].ToString();
                        //单位	C⇒3
                        worksheet.Cells[intIndex, 3] = dtSource.Rows[intIndex - 3]["单位"].ToString();
                        //届数	D⇒4
                        worksheet.Cells[intIndex, 4] = dtSource.Rows[intIndex - 3]["届数"].ToString();
                        //主席	E⇒5
                        worksheet.Cells[intIndex, 5] = dtSource.Rows[intIndex - 3]["主席"].ToString();
                        //副主席 F⇒6
                        worksheet.Cells[intIndex, 6] = dtSource.Rows[intIndex - 3]["副主席"].ToString();
                        //委员名称 G⇒7	
                        worksheet.Cells[intIndex, 7] = dtSource.Rows[intIndex - 3]["委员名称"].ToString();
                        //委员分工 H⇒8	
                        worksheet.Cells[intIndex, 8] = dtSource.Rows[intIndex - 3]["委员分工"].ToString();
                        //备注 I⇒9
                        worksheet.Cells[intIndex, 9] = dtSource.Rows[intIndex - 3]["备注"].ToString();
                    }
                    break;
                //2、工会工作-工会建家统计表	
                case enumExcelOptiion.工会建家统计表:
                    //插入格式   在第3行插入复制行
                    ((Range)(worksheet.Rows[3, System.Type.Missing])).Copy(System.Type.Missing);
                    for (int intIndex = 0; intIndex < dtSource.Rows.Count; intIndex++)
                    {
                        ((Range)(worksheet.Cells[3, 1])).EntireRow.Insert(1, System.Type.Missing);
                    }
                    //给报表赋值
                    for (int intIndex = 3; intIndex < dtSource.Rows.Count + 3; intIndex++)
                    {
                        //行(B3到I3) 内容从第3行开始
                        //序号  B⇒2	
                        worksheet.Cells[intIndex, 2] = dtSource.Rows[intIndex - 3]["序号"].ToString();
                        //单位	C⇒3
                        worksheet.Cells[intIndex, 3] = dtSource.Rows[intIndex - 3]["单位"].ToString();
                        //届数	D⇒4
                        worksheet.Cells[intIndex, 4] = dtSource.Rows[intIndex - 3]["届数"].ToString();
                        //主席	E⇒5
                        worksheet.Cells[intIndex, 5] = dtSource.Rows[intIndex - 3]["主席"].ToString();
                        //副主席 F⇒6
                        worksheet.Cells[intIndex, 6] = dtSource.Rows[intIndex - 3]["副主席"].ToString();
                        //委员名称 G⇒7	
                        worksheet.Cells[intIndex, 7] = dtSource.Rows[intIndex - 3]["委员名称"].ToString();
                        //委员分工 H⇒8	
                        worksheet.Cells[intIndex, 8] = dtSource.Rows[intIndex - 3]["委员分工"].ToString();
                        //备注 I⇒9
                        worksheet.Cells[intIndex, 9] = dtSource.Rows[intIndex - 3]["备注"].ToString();
                    }
                    break;
                //各类员工入会率统计
                case enumExcelOptiion.各类员工入会率统计:
                    //插入格式   在第3行插入复制行
                    ((Range)(worksheet.Rows[3, System.Type.Missing])).Copy(System.Type.Missing);
                    for (int intIndex = 0; intIndex < dtSource.Rows.Count; intIndex++)
                    {
                        ((Range)(worksheet.Cells[3, 1])).EntireRow.Insert(1, System.Type.Missing);
                    }
                    //给报表赋值
                    for (int intIndex = 3; intIndex < dtSource.Rows.Count + 3; intIndex++)
                    {
                        //行(B3到I3) 内容从第3行开始
                        //序号  B⇒2	
                        worksheet.Cells[intIndex, 2] = dtSource.Rows[intIndex - 3]["序号"].ToString();
                        //单位	C⇒3
                        worksheet.Cells[intIndex, 3] = dtSource.Rows[intIndex - 3]["单位"].ToString();
                        //届数	D⇒4
                        worksheet.Cells[intIndex, 4] = dtSource.Rows[intIndex - 3]["届数"].ToString();
                        //主席	E⇒5
                        worksheet.Cells[intIndex, 5] = dtSource.Rows[intIndex - 3]["主席"].ToString();
                        //副主席 F⇒6
                        worksheet.Cells[intIndex, 6] = dtSource.Rows[intIndex - 3]["副主席"].ToString();
                        //委员名称 G⇒7	
                        worksheet.Cells[intIndex, 7] = dtSource.Rows[intIndex - 3]["委员名称"].ToString();
                        //委员分工 H⇒8	
                        worksheet.Cells[intIndex, 8] = dtSource.Rows[intIndex - 3]["委员分工"].ToString();
                        //备注 I⇒9
                        worksheet.Cells[intIndex, 9] = dtSource.Rows[intIndex - 3]["备注"].ToString();
                    }
                    break;
                //聘用各类劳务人员入会率统计
                case enumExcelOptiion.聘用各类劳务人员入会率统计:
                    strTempateFileName = "聘用各类劳务人员入会率统计.xls";
                    break;
                //各级工会组织专职工会干部工会干部培训统计
                case enumExcelOptiion.各级工会组织专职工会干部工会干部培训统计:
                    strTempateFileName = "各级工会组织专职工会干部工会干部培训统计.xls";
                    break;
                //专职工会干部统计
                case enumExcelOptiion.专职工会干部统计:
                    strTempateFileName = "专职工会干部统计.xls";
                    break;

                //4、工会工作-基层工会年度法律援助工作统计
                case enumExcelOptiion.基层工会年度法律援助工作统计:
                    //插入格式   在第3行插入复制行
                    ((Range)(worksheet.Rows[3, System.Type.Missing])).Copy(System.Type.Missing);
                    for (int intIndex = 0; intIndex < dtSource.Rows.Count; intIndex++)
                    {
                        ((Range)(worksheet.Cells[3, 1])).EntireRow.Insert(1, System.Type.Missing);
                    }
                    //给报表赋值
                    for (int intIndex = 3; intIndex < dtSource.Rows.Count + 3; intIndex++)
                    {
                        //行(B3到I3) 内容从第3行开始
                        //单位2
                        worksheet.Cells[intIndex, 2] = dtSource.Rows[intIndex - 3]["单位"].ToString();
                        //职工之家名称3	
                        worksheet.Cells[intIndex, 3] = dtSource.Rows[intIndex - 3]["职工之家名称"].ToString();
                        //工会主席4 
                        worksheet.Cells[intIndex, 4] = dtSource.Rows[intIndex - 3]["工会主席"].ToString();
                        //组长5	
                        worksheet.Cells[intIndex, 5] = dtSource.Rows[intIndex - 3]["组长"].ToString();
                        //现有等级6	
                        worksheet.Cells[intIndex, 6] = dtSource.Rows[intIndex - 3]["现有等级"].ToString();
                        //申报等级7	
                        worksheet.Cells[intIndex, 7] = dtSource.Rows[intIndex - 3]["申报等级"].ToString();
                        //会员人数8	
                        worksheet.Cells[intIndex, 8] = dtSource.Rows[intIndex - 3]["会员人数"].ToString();
                        //建成时间9	
                        worksheet.Cells[intIndex, 9] = dtSource.Rows[intIndex - 3]["建成时间"].ToString();
                        //备注10
                        worksheet.Cells[intIndex, 10] = dtSource.Rows[intIndex - 3]["备注"].ToString();

                    }
                    break;
                //5、工会工作-基层单位厂务公开民主管理工作统计表
                case enumExcelOptiion.基层单位厂务公开民主管理工作统计表:

                    break;
                //6、工会工作-劳动模范及获乐山市以上先进集体统计表
                case enumExcelOptiion.劳动模范及获乐山市以上先进集体统计表:

                    break;
                //1、职工福利-互助员工统计表	
                case enumExcelOptiion.互助员工统计表:

                    break;
                //2、职工福利-疗（休）养计划表
                case enumExcelOptiion.疗养计划表:

                    break;
                //3、职工福利-疗养情况统计表
                case enumExcelOptiion.疗养情况统计表:

                    break;

            }
         

            string tick = DateTime.Now.Ticks.ToString();
            string strFileName = tick + ".xls";
            string strSavePath = template_path + "\\" + strFileName;

            workbook.SaveAs(strSavePath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);

            excelOperate.Dispose(worksheet, workbook, app);//关闭Excel进程

            Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(strFileName));
            Response.ContentType = "application/ms-excel";// 指定返回的是一个不能被客户端读取的流，必须被下载
            Response.WriteFile(strFileName); // 把文件流发送到客户端
            Response.End();
        }
    }
}
